package com.zhuanzhuan.hero.user.facade;

import com.bj58.spat.scf.server.contract.annotation.ServiceContract;
import com.bj58.youpin.common.rpc.result.Result;
import com.bj58.zhuanzhuan.zzentry.common.service.entity.ServiceHeaderEntity;
import com.bj58.zhuanzhuan.zzentry.common.service.entity.ZZOpenScfBaseResult;
import com.bj58.zhuanzhuan.zzentry.common.service.model.openEntry.ZZHeader;
import com.zhuanzhuan.hero.user.dto.label.AddFraternityAuthLabelDTO;
import com.zhuanzhuan.hero.user.dto.label.AuthenticatedLabelsDTO;
import com.zhuanzhuan.hero.user.dto.label.BindFraternityAuthLabelDTO;
import com.zhuanzhuan.hero.user.dto.label.CancelAuthenticatedLabelDTO;
import com.zhuanzhuan.hero.user.vo.PageResultWrapper;
import com.zhuanzhuan.hero.user.vo.UserListItemVO;
import com.zhuanzhuan.hero.user.vo.label.CertificationQualifiedVO;
import com.zhuanzhuan.hero.user.vo.label.FraternityAuthLabelVO;
import com.zhuanzhuan.hero.user.vo.label.ToAuthFraternityAuthLabelVO;
import com.zhuanzhuan.hero.user.vo.label.UserFraternityAuthLabelVO;

import java.util.List;

/**
 * @ClassName IFraternityAuthFacade
 * @Description
 * @Author hanjunjun
 * @Date 2024/6/19 19:17
 */
@ServiceContract
public interface IFraternityAuthFacade {

    /**
     * 前端-同行认证-查询所有同行认证标签及被认证数 【我的】页弹幕
     *
     * @param header
     * @param targetUid 看谁的
     * @return com.bj58.zhuanzhuan.zzentry.common.service.entity.ZZOpenScfBaseResult<com.zhaunzhuan.hero.user.vo.label.FraternityAuthLabelVO>
     * @author  hanjunjun
     * @date 2024/6/19
     **/
    ZZOpenScfBaseResult<List<FraternityAuthLabelVO>> queryFraternityAuthLabels(@ZZHeader ServiceHeaderEntity header, Long targetUid);

    /**
     * 前端-同行认证-主态-查询用户所有已绑定和可绑定的标签
     *
     * @param header
     * @return com.bj58.zhuanzhuan.zzentry.common.service.entity.ZZOpenScfBaseResult<java.util.List<com.zhaunzhuan.hero.user.vo.label.UserFraternityAuthLabelVO>>
     * @author  hanjunjun
     * @date 2024/6/19
     **/
    ZZOpenScfBaseResult<List<UserFraternityAuthLabelVO>> queryUserFraternityAuthLabels(@ZZHeader ServiceHeaderEntity header);

    /**
     * 前端-同行认证-主态-新增一个标签
     *
     * @param header
     * @param addFraternityAuthLabelDTO
     * @return com.bj58.zhuanzhuan.zzentry.common.service.entity.ZZOpenScfBaseResult<java.lang.Void>
     * @author  hanjunjun
     * @date 2024/6/19
     **/
    ZZOpenScfBaseResult<UserFraternityAuthLabelVO> addFraternityAuthLabel(@ZZHeader ServiceHeaderEntity header, AddFraternityAuthLabelDTO addFraternityAuthLabelDTO);

    /**
     * 前端-同行认证-删除一个标签
     *
     * @param header
     * @param labelId
     * @return com.bj58.zhuanzhuan.zzentry.common.service.entity.ZZOpenScfBaseResult<java.lang.Void>
     * @author  hanjunjun
     * @date 2024/6/19
     **/
    ZZOpenScfBaseResult<Boolean> delFraternityAuthLabel(@ZZHeader ServiceHeaderEntity header, Long labelId);

    /**
     * 前端-同行认证-主态-绑定所选标签
     *
     * @param header
     * @param dto
     * @return com.bj58.zhuanzhuan.zzentry.common.service.entity.ZZOpenScfBaseResult<java.lang.Void>
     * @author  hanjunjun
     * @date 2024/6/19
     **/
    ZZOpenScfBaseResult<Boolean> bindFraternityAuthLabels(@ZZHeader ServiceHeaderEntity header,
        BindFraternityAuthLabelDTO dto);

    /**
     * 前端-同行认证-客态-是否有资格认证
     *
     * @param header
     * @param homemakerUid
     * @return com.bj58.zhuanzhuan.zzentry.common.service.entity.ZZOpenScfBaseResult<java.lang.Boolean>
     * @author  hanjunjun
     * @date 2024/6/19
     **/
    ZZOpenScfBaseResult<CertificationQualifiedVO> hasCertificationQualified(@ZZHeader ServiceHeaderEntity header, Long homemakerUid);

    /**
     * 前端-同行认证-客态-查询已认证的和未认证的
     *
     * @param header
     * @param homemakerUid
     * @return com.bj58.zhuanzhuan.zzentry.common.service.entity.ZZOpenScfBaseResult<com.zhaunzhuan.hero.user.vo.label.ToAuthFraternityAuthLabelVO>
     * @author  hanjunjun
     * @date 2024/6/19
     **/
    ZZOpenScfBaseResult<ToAuthFraternityAuthLabelVO> queryToAuthFraternityAuthLabel(@ZZHeader ServiceHeaderEntity header,
        Long homemakerUid);

    /**
     * 前端-同行认证-客态-认证标签
     *
     * @param header
     * @param authenticatedLabelsDTO
     * @return com.bj58.zhuanzhuan.zzentry.common.service.entity.ZZOpenScfBaseResult<java.lang.Void>
     * @author  hanjunjun
     * @date 2024/6/19
     **/
    ZZOpenScfBaseResult<Boolean> authenticatedLabels(@ZZHeader ServiceHeaderEntity header,
        AuthenticatedLabelsDTO authenticatedLabelsDTO);

    /**
     * 前端-同行认证-客态-取消认证
     *
     * @param header
     * @param cancelAuthenticatedLabelDTO
     * @return com.bj58.zhuanzhuan.zzentry.common.service.entity.ZZOpenScfBaseResult<java.lang.Void>
     * @author  hanjunjun
     * @date 2024/6/19
     **/
    ZZOpenScfBaseResult<Boolean> cancelAuthenticatedLabels(@ZZHeader ServiceHeaderEntity header,
        CancelAuthenticatedLabelDTO cancelAuthenticatedLabelDTO);

    /**
     * 后端-查询给自己进行同行认证的用户列表
     *
     * @param uid
     * @return com.bj58.youpin.common.rpc.result.Result<java.util.List<com.zhuanzhuan.hero.user.vo.UserItemBriefVO>>
     * @author  hanjunjun
     * @date 2024/7/6
     **/
    Result<PageResultWrapper<UserListItemVO>> queryAuthenticatedUsers(Long uid, Integer pageNum, Integer pageSize);

    /**
     * 后端-查询用户被多少同行认证
     *
     * @param uid
     * @return com.bj58.youpin.common.rpc.result.Result<java.lang.Integer>
     * @author  hanjunjun
     * @date 2024/7/8
     **/
    Result<Integer> queryAuthenticatedNum(Long uid);

}
